home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume89
/
unix
/
cal.1
< prev
next >
Wrap
Text File
|
1989-05-03
|
16KB
|
529 lines
Path: xanth!ames!oliveb!sun!rishathra!page
From: page%rishathra@Sun.COM (Bob Page)
Newsgroups: comp.sources.amiga
Subject: v89i111: cal - unix(tm)-like calendar
Message-ID: <102551@sun.Eng.Sun.COM>
Date: 3 May 89 06:49:22 GMT
Sender: news@sun.Eng.Sun.COM
Lines: 518
Approved: page@sun.com
Submitted-by: brant@uf.msc.umn.edu (Gary Brant)
Posting-number: Volume 89, Issue 111
Archive-name: unix/cal.1
This is my clone of the *nix cal program. It has been in gestation
for about six months waiting for my inspiration at handling the Sep.
1752 discontinuity. Well, it's a hack but it gives the same results
as the *nix version.
[uuencoded executable included. ..bob]
# This is a shell archive.
# Remove anything above and including the cut line.
# Then run the rest of the file through 'sh'.
# Unpacked files will be owned by you and have default permissions.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: SHell ARchive
# Run the following text through 'sh' to create:
# README
# cal.doc
# cal.c
# makefile
# cal.uu
# This is archive 1 of a 1-part kit.
# This archive created: Tue May 2 23:43:50 1989
echo "extracting README"
sed 's/^X//' << \SHAR_EOF > README
XThis is a calendar program based on one seen on a local *nix machine.
XI made the interface a little more friendly by adding 1900 to years
Xless than 100 and allowing for spelling month names (3 char. significance)
X
XThis program is freely distributable, as long as you leave my name in
Xthe source & don't sell it for a profit.
X
X
X Gary Brant
X
X US mail: 1355 Eustis St. #1
X St. Paul, MN 55108
X
X ARPA: brant@uf.msc.umn.edu
X
SHAR_EOF
echo "extracting cal.doc"
sed 's/^X//' << \SHAR_EOF > cal.doc
X
XCAL USER COMMANDS CAL
X
X
X
XNAME
X cal - display calendar
X
XSYNOPSIS
X cal [ month ] [ year ]
X
XDESCRIPTION
X Cal displays a calendar for the specified year. If a month
X is also specified, a calendar for that month only is
X displayed. If neither is specified, a calendar for the
X present month is printed.
X
X Year can be between 100 and 9999. If you specify a year less
X than 100, the year is incremented by 1900. Also, the year is
X always considered to start in January, even though this
X is historically naive.
X
X month is a number between 1 and 12, or one of {Jan, Feb, ...}
X case is insignificant.
X
X The calendar produced is that for England and her colonies.
X
X Try September 1752.
SHAR_EOF
echo "extracting cal.c"
sed 's/^X//' << \SHAR_EOF > cal.c
X/* cal.c - print calendar for one month or one year
X *
X * cal [month] [year]
X *
X * cal (C) 1988 by Gary L. Brant
X */
X
X#include <stdio.h>
X#include <fcntl.h>
X
X#define DPY 365L /* days per year */
X#define FUDGE1 1 /* needed to make day of week come out right */
X#define FUDGE2 6 /* for old style (Julian) calendar */
X
Xint days[12] = {
X 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
X};
Xint mdays[13] = {
X 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
X};
Xchar *months[12] = {
X "January", "February", "March", "April", "May", "June",
X "July" , "August" , "September", "October", "November", "December"
X};
Xchar dayline[] = " S M Tu W Th F S\n";
Xchar line[8][68]; /* line buffer */
Xint multi = 0;
Xextern struct _dev *_devtab;
Xstruct FileHandle *err, *out, *Output ();
X
X
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X int m, d, y, i, k;
X
X out = Output ();
X getdate (&m, &d, &y);
X if (argc == 1) {
X fixtab (&y);
X printmonth (m, y);
X exit (0);
X }
X
X if ((k = convert (argv[1])) == 0) {
X m = 0;
X for (i = 0; i < 12; i++)
X if (cmpmonth (argv[1], months[i]) == 0) {
X m = i + 1;
X break;
X }
X if (m == 0) {
X badarg (argv[1]);
X }
X }
X
X if (argc == 2) {
X if (k == 0) {
X fixtab (&y);
X printmonth (m, y);
X } else {
X multi = 1;
X fixtab (&k);
X for (m = 1; m < 13; m++)
X printmonth (m, k);
X }
X exit (0);
X }
X
X if (k > 0 && k < 13)
X m = k;
X else if (m == 0 || k != 0) {
X badarg (argv[1]);
X }
X
X if (argc == 3) {
X if ((y = convert (argv[2])) == 0) {
X badarg (argv[2]);
X }
X }
X fixtab (&y);
X printmonth (m, y);
X}
X
X
X/* printmonth () - either prints an entire month at a time or multiplexes
X * a month into a buffer, dumping the buffer after the third call.
X */
Xprintmonth (m, y)
Xregister int m;
Xint y;
X{
X int dow; /* day of week for first day of month */
X register int first, last;
X register int index, l, p;
X static int q = 0, maxl = 0;
X int i, mday[32]; /* table of day numbers for month */
X
X if (multi) {
X q++;
X if (q > 3) {
X maxl = 0;
X q = 1;
X }
X } else
X q = 1;
X p = 22 * (q - 1); /* character position of line in buffer */
X first = 4;
X last = strlen (months[--m]) + first;
X blank (&line[0][p], first);
X
X strcpy (&line[0][p+first], months[m]); /* copy month name into buf */
X itoa (y, &line[0][p+last], 5); /* encode year */
X if (multi && q != 3)
X blank (&line[0][p+last+5], 22 - last - 5);
X else {
X line[0][p+last+5] = '\n';
X line[0][p+last+6] = '\0';
X puts (line[0]);
X puts (line[1]);
X }
X
X dow = weekday (m, y);
X index = 3 * dow;
X blank (&line[2][p], index);
X last = 7 - dow;
X first = 1;
X l = 2;
X
X for (i = 1; i <= days[m]; i++) /* fill day numbers table */
X mday[i] = i;
X if ((y == 1752) && (m == 8)) /* special case Sep. 1752 */
X for (i = 3; i <= days[m]; i++)
X mday[i] += 11;
X while (first <= days[m]) { /* loop thru month one week per line */
X while (first <= last) { /* for each day in week encode day of month */
X itoa (mday[first++], &line[l][p+index], 3);
X index += 3;
X }
X if (multi && q != 3) {
X blank (&line[l][p+index], 22 - index);
X if (l > maxl)
X maxl = l;
X } else {
X line[l][p+index++] = '\n';
X line[l][p+index] = '\0';
X puts (line[l]);
X }
X last = (last + 7) > days[m] ? days[m] : last + 7;
X l++;
X index = 0;
X }
X
X if (multi)
X if (q != 3) /* blank fill remaining lines this month */
X while (l < 8)
X blank (&line[l++][p], 22);
X else /* determine if any lines remain to be written */
X while (l <= maxl) {
X line[l][p] = '\n';
X line[l][p+1] = '\0';
X puts (line[l++]);
X }
X}
X
X
Xblank (line, num)
Xregister char line[];
Xregister int num;
X{
X while (num >= 0)
X line[num--] = ' ';
X}
X
X
X/* itoa - integer to ascii conversion, with leading blanks.
X */
Xitoa (num, str, ndig)
Xregister int num, ndig;
Xregister char str[3];
X{
X register int i, rmd;
X
X while (ndig-- > 0) {
X i = num / 10;
X rmd = num - 10 * i;
X str[ndig] = (num > 0) ? '0' + rmd : ' ';
X num = i;
X }
X}
X
X
X/* getdate - return month, day, year. Valid through: 02/28/2100.
X */
X
Xgetdate (m, d, y)
Xint *m, *d, *y;
X{
X int i, j, k, z;
X long l, clock[3], ndays;
X
X DateStamp (clock); /* get system datestamp */
X ndays = clock[0]; /* days since 01/01/1978 */
X k = (++ndays + DPY) / DPY;
X do {
X j = k >> 2;
X i = ndays - DPY * --k;
X } while (j >= i);
X ndays = ndays - DPY * k - ((k+1) >> 2);
X *y = k + 1978;
X z = ((*y % 4) == 0 && (ndays+3)>>5 > 0) ? 1 : 0;
X *m = (mdays[i=(ndays>>5)+1]+z >= ndays) ? i : i + 1;
X *d = ndays - mdays[*m-1] - z;
X}
X
X
X/* fixtab - correct for leapyears; also replicate day-of-week line.
X */
Xfixtab (y)
Xregister int *y;
X{
X register int i;
X
X if (*y < 100) /* a civility - not really interested in years */
X *y += 1900; /* 1st century AD */
X if ((*y % 4) == 0) {
X if (((*y % 100) != 0) || ((*y % 400) == 0) || (*y < 1753)) {
X days[1] = 29;
X for (i = 2; i < 13; i++)
X mdays[i]++;
X if (*y == 1752)
X days[8] -= 11;
X }
X }
X if (multi) {
X for (i = 0; i < 66; i += 22)
X strcpy (&line[1][i], dayline);
X line[1][21] = ' ';
X line[1][43] = ' ';
X } else
X strcpy (&line[1][0], dayline);
X}
X
X
X/* convert () - convert string from ascii to binary integer
X */
Xconvert (string)
Xchar string[];
X{
X register int c, i, result;
X
X i = result = 0;
X while (string[i] != '\0') {
X if ((c = string[i++] - '0') < 0 || c > 9)
X return (0);
X else {
X result *= 10;
X result += c;
X }
X }
X return (result);
X}
X
X
X/* puts () - write string to standard output
X */
Xputs (string)
Xchar string[];
X{
X Write (out, string, (long) strlen (string));
X}
X
X
X/* weekday - return day-of-week for first day of month.
X */
Xweekday (m, y)
Xregister int m, y;
X{
X if (y > 1752 || (y == 1752 && m > 8))
X return (mdays[m] + y + --y / 4 - y / 100 + y / 400 + FUDGE1) % 7;
X else
X return (mdays[m] + y + --y / 4 + FUDGE2) % 7;
X}
X
X
X
Xbadarg (string)
Xchar string[];
X{
X err = _devtab[2].fd;
X Write (err, string, (long) strlen(string));
X Write (err, " bad argument\n", 14L);
X exit (10);
X}
X
X
X/* cmpmonth () - compare month argument entered by user with month name.
X * The comparison will be made case insensitive.
X */
Xcmpmonth (str1, str2)
Xregister char str1[], str2[];
X{
X register int j;
X
X if ((j = (toupper(str1[0])-str2[0])) != 0)
X return (j);
X else if ((j = tolower(str1[1])-str2[1]) != 0)
X return (j);
X else
X return (tolower(str1[2])-str2[2]);
X}
X
X
X/* _wb_parse () - just to keep down the size of the executable
X */
X_wb_parse ()
X{
X}
SHAR_EOF
echo "extracting makefile"
sed 's/^X//' << \SHAR_EOF > makefile
XCFLAGS=-n
X
Xcal: cal.o
X ln -g cal.o -lc
X
Xcal.o: cal.c
X
SHAR_EOF
echo "extracting cal.uu"
sed 's/^X//' << \SHAR_EOF > cal.uu
X
Xbegin 777 cal
XM```#\P`````````#``````````(```04````OP````$```/I```$%$[Z"7A*J
XM86YU87)Y`$9E8G)U87)Y`$UA<F-H`$%P<FEL`$UA>0!*=6YE`$IU;'D`075GM
XM=7-T`%-E<'1E;6)E<@!/8W1O8F5R`$YO=F5M8F5R`$1E8V5M8F5R`$Y5__9.,
XMN@](*4""LDAM__I(;?_\2&W__DZZ!1I/[P`,#&T``0`(9B!(;?_Z3KH&&%A/R
XM/RW_^C\M__Y.N@%*6$]"9TZZ#4I43R!M``HO*``$3KH&L%A/.T#_]F960FW_D
XM_D)M__@P+?_X2,#E@$'L@#0O,`@`(&T`"B\H``1.N@?B4$]*0&8,,"W_^%)`1
XM.T#__F`,4FW_^`QM``S_^&W&2FW__F8.(&T`"B\H``1.N@=46$\,;0`"``AF6
XM6$IM__9F&DAM__I.N@6`6$\_+?_Z/RW__DZZ`+)83V`P.7P``8!\2&W_]DZZ)
XM!6!83SM\``'__C\M__8_+?_^3KH`C%A/4FW__@QM``W__FWF0F=.N@R`5$]*"
XM;?_V;Q`,;0`-__9L"#MM__;__F`:2FW__F<&2FW_]F<.(&T`"B\H``1.N@;$J
XM6$\,;0`#``AF(B!M``HO*``(3KH%KEA/.T#_^F8.(&T`"B\H``A.N@::6$](`
XM;?_Z3KH$U%A//RW_^C\M__YA!EA/3EU.=4Y5_[Q(YP\P."T`"$IL@'QG&%)L?
XM@'X,;``#@'YO"D)L@(`Y?``!@'Y@!CE\``&`?C`L@'Y30,'\`!8V0'H$4T0PG
XM!$C`Y8!![(`T+S`(`$ZZ!PA83SP`W$4_!3`+2,!![(".T(@O`$ZZ`M)<3S`$8
XM2,#E@$'L@#0O,`@`,`O014C`0>R`CM"(+P!.N@:^4$\_/``%,`O01DC`0>R``
XMCM"(+P`_+0`*3KH"O%!/2FR`?&<H#&P``X!^9R!P%I!&6T`_`#`+T$9:0$C`:
XM0>R`CM"(+P!.N@)H7$]@,C`+T$9:0$'L@(X1O``*```P"]!&7$!![(".0C``(
XM`$AL@(Y.N@3*6$](;(#23KH$P%A//RT`"C\$3KH$VEA/.T#__CXM__[/_``#L
XM/P<P"TC`0>R!%M"(+P!.N@((7$]\!YQM__YZ`31\``([?``!__Q@%C`M__Q(0
XMP..`0>W_O#&M__P(`%)M__PP!$C`XX!![(`",BW__+)P"`!OU@QM!M@`"F8X]
XMN'P`"&8R.WP``__\8!8P+?_\2,#C@$'M_[S1P`90``M2;?_\,`1(P..`0>R`C
XM`C(M__RR<`@`;]8P!$C`XX!![(`"NG`(`&X``.ZZ1FXT/SP``S`*P?P`1#(+_
XMTD=(P="!0>R`CM"(+P`P!5)%2,#C@$'M_[P_,`@`3KH!;%!/5D=@R$IL@'QG^
XM-@QL``.`?F<N<!:01S\`,`K!_`!$,@O21TC!T(%![(".T(@O`$ZZ`1!<3[3LQ
XM@(!O!#E*@(!@1#`*P?P`1#('4D?22TC!T(%![(".$;P`"@@`,`K!_`!$,@O2"
XM1TC!T(%![(".0C`(`#`*P?P`1$'L@([0B"\`3KH#3%A/,`9>0#($2,'C@4'LU
XM@`*P<!@`;Q(P!$C`XX!![(`"(@`P,!@`8`0P!EY`/`!22GX`8`#_!$IL@'QGM
XM>@QL``.`?F<HM/P`"&P@/SP`%C`*4DK!_`!$,@M(P="!0>R`CM"(+P!A6%Q/K
XM8-I@2K3L@(!N1#`*P?P`1#(+2,'0@4'L@(X1O``*"``P"L'\`$0R"U)!2,'0&
XM@4'L@(Y",`@`,`I22L'\`$1![(".T(@O`$ZZ`II83V"V3-\,\$Y=3G5.50``H
XM2.<(("1M``@X+0`,2D1M##`$4T05O``@``!@\$S?!!!.74YU3E4``$CG#R`X:
XM+0`()&T`"CHM``XP!5-%2D!O*#P$2,:-_``*,`;!_``*/@2>0$I$;P@P!]!\Y
XM`#!@`G`@%8!0`#@&8-!,WP3P3EU.=4Y5_^1(;?_H3KH)[EA/*VW_Z/_D4JW_J
XMY"`M_^30O````6TB/````6U.N@>(.T#_^C`M__KD0#M`__Q3;?_Z,"W_^L'\A
XM`6TB+?_DDH`[0?_^,"W__+!M__YLUC`M__K!_`%M(BW_Y)*`,"W_^E)`Y$!(X
XMP)*`*T'_Y"!M`!`P+?_ZT'P'NC"`(&T`$#`02,"!_``$2$!*0&80("W_Y%:`%
XMZH!*@&\$<`%@`G``.T#_^"`M_^3J@%*`.T#__DC`XX!![(`:,C`(`-)M__A(:
XMP;*M_^1M!C`M__Y@!C`M__Y20"!M``@P@"!M``@P$%-`2,#C@$'L@!HR,`@`K
XM2,$@+?_DD($R+?_X2,&0@2!M``PP@$Y=3G5.50``2.<(("1M``@,4@!D;`0&\
XM4@=L,!)(P('\``1(0$I`9DPP$DC`@?P`9$A`2D!F%#`22,"!_`&02$!*0&<&B
XM#%(&V6PJ.7P`'8`$>`(P!$C`XX!![(`:4G`(`%)$N'P`#6WJ#%(&V&8&!&P`9
XM"X`22FR`?&<P>`!(;(!D,`1(P$'L@-+0B"\`3KH!_E!/V'P`%KA\`$)MX!E\@
XM`""`YQE\`""`_6`.2&R`9$AL@-).N@'84$],WP003EU.=4Y5``!(YPX`?``Z(
XM!B!M``A*,%``9S`P!5)%(&T`"!(P``!(@3@!F'P`,$I$;0:X?``);PIP`$S?W
XM`'!.74YUS?P`"MQ$8,8P!F#L3E4``"\M``A.N@&(6$](P"\`+RT`""\L@K).P
XMN@@"3^\`#$Y=3G5.50``2.<,`#@M``@Z+0`*NGP&V&X,NGP&V&9*N'P`"&]$Y
XM,`1(P..`0>R`&B(`,#`8`%-%,@5(P8/\``300=!%,@5(P8/\`&2003(%2,&#X
XM_`&0T$%20$C`@?P`!TA`3-\`,$Y=3G4P!$C`XX!![(`:(@`P,!@`4T4R!4C!E
XM@_P`!-!!T$5<0$C`@?P`!TA`8,Y.50``(&R"MBEH``R"KB\M``A.N@#(6$](>
XMP"\`+RT`""\L@JY.N@="3^\`#$AX``Y(>@`<+RR"KDZZ!RY/[P`,/SP`"DZZ$
XM!4943TY=3G4@8F%D(&%R9W5M96YT"@``3E4``$CG"#`D;0`()FT`#!`22(`_;
XM`$ZZ`'A43Q(32($X`)A!9PHP!$S?#!!.74YU$"H``4B`/P!.N@!N5$\2*P`!5
XM2($X`)A!9P0P!&#:$"H``DB`/P!.N@!05$\2*P`"2(&006#"3E4``$Y=3G4@=
XM;P`$(`@B;P`($-EF_$YU(&\`!"`(2AAF_)'`(`A3@$YU<``0+P`%L#P`8&,*]
XML#P`>F($D#P`($YU<``0+P`%L#P`0&,*L#P`6F($T#P`($YU87!#[(".1>R`B
XMCK7)9@XR/`";:PAT`"+"4<G__"E/@KHL>``$*4Z"ODCG@(`(+@`$`2EG$$OZ+
XM``A.KO_B8`9"I_-?3G-#^@`@3J[^:"E`@L)F#"X\``.`!TZN_Y1@!$ZZ`!I0^
XM3TYU9&]S+FQI8G)A<GD`2?D``'_^3G5.50``+PI(>0`!```P+(""P?P`!B\`K
XM3KH%[BE`@K903V840J=(>0`!``!.N@6V4$\N;(*Z3G4@;(*V0F@`!"!L@K8Q"
XM?``!`!`@;(*V,7P``0`*(&R"NB`L@KJ0J``$4(`I0(+&(&R"QB"\34%.6$*GC
XM3KH%HB1`2JH`K%A/9RXO+0`,+RT`""\*3KH`KCE\``&"RB!L@K8`:(````0@\
XM;(*V`&B````*3^\`#&!"2&H`7$ZZ!9Y(:@!<3KH%?BE`@LP@;(+,2J@`)%!/:
XM9Q`@;(+,(F@`)"\13KH$KEA/+RR"S"\*3KK^2"EL@LR"T%!/3KH$KB!L@K8@"
XM@$ZZ!+X@;(*V(4``!F<62'@#[4AZ`"I.N@26(&R"MB%```Q03R\L@M`_+(+4N
XM3KKU0$)G3KH"R%!/)%].74YU*@!.50``2.<,,"1M`!`@;0`(2J@`K&<8(&T`@
XM""`H`*SE@"@`($0@*``0Y8`F0&`$)FR`A!`32(!(P-"M``Q4@#E`@M9"IS`LP
XM@M9(P"\`3KH$@"E`@MA03V8(3-\,,$Y=3G40$TB`.@`_!2!+4H@O""\L@MA.H
XMN@%^,`5(P"!`T>R"V$/Z`400V6;\/RT`#B\*+RR"V$ZZ`3H@;(+80C!0`#E\"
XM``&"U#`%2,#0K(+8)D!2BR1+3^\`%!`32(`Z`+!\`"!G&+I\``EG$KI\``QG_
XM#+I\``UG!KI\``IF!%*+8-@,$P`@;7H,$P`B9BY2BR!+4HL0$$B`.@!G'B!*L
XM4HH0A;I\`")F$`P3`")F!%*+8`9"*O__8`)@UF`X($M2BQ`02(`Z`&<FNGP`T
XM(&<@NGP`"6<:NGP`#&<4NGP`#6<.NGP`"F<(($I2BA"%8,X@2E**0A!*168"C
XM4XM2;(+48`#_6D(20J<P+(+44D!(P.6`+P!.N@->*4""T%!/9@A";(+48`#^;
XMV'H`)FR"V&`D,`5(P.6`(&R"T"&+"``@2R`(2AAF_)'`4X@P"%)`2,#7P%)%Y
XMNFR"U&W6,`5(P.6`(&R"T$*P"`!@`/Z4(``P/'__8`0P+P`,(&\`!$H89OQ3N
XM2")O``A30!#95\C__&<"0A`@+P`$3G5,[P,```0@"#(O``Q@`A#95\G__&<&R
XM4D%@`D(84<G__$YU2.=(`$*$2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,K
XMWP`22H!.=4CG2`!"A$J`:@1$@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YUO
XM+P%A!B(?2H!.=4CG,`!(04I!9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(^
XM04S?``Q.=4A!)@$B`$)!2$%(0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU4
XM3E4``$JL@MQG!B!L@MQ.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#_I
XM_$JL@K9G*'@`8`H_!$ZZ`/Y43U)$N&R`@FWP,"R`@L'\``8O`"\L@K9.N@'<H
XM4$]*K(+@9P8@;(+@3I!*K("(9PHO+("(3KH!6%A/2JR"Y&<((&R"Y""L@NA*'
XMK(+L9PHO+(+L3KH!=%A/2JR"\&<*+RR"\$ZZ`6183TJL@O1G"B\L@O1.N@%4]
XM6$]*K(+X9PHO+(+X3KH!1%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"Q
XMI_-?3G-*K(+,9C!*K(+89R@P+(+62,`O`"\L@MA.N@$T,"R"U%)`2,#E@"\`P
XM+RR"T$ZZ`2!/[P`08`Y.N@$.+RR"S$ZZ`2I83R`M__PN;(*Z3G4H'TY=3G5.0
XM50``2.<.(#@M``@P!,'\``8D0-7L@K9*1&T*N&R`@FP$2I)F$#E\``*"_'#_$
XM3-\$<$Y=3G4(*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@L).[O_<(B\`1
XM!"QL@L).[O^"(B\`!"QL@L).[O]`+&R"PD[N_\I,[P`&``0L;(+"3N[_XD[ZP
XM``(L;(+"3N[_Q$[Z``(B+P`$+&R"PD[N_Z9.^@`"3.\`#@`$+&R"PD[N_]!(_
XMYP$$3.\@@``,+&R"ODZN_Y1,WR"`3G4B;P`$+&R"OD[N_F),[P`#``0L;(*^K
XM3N[_.B)O``0L;(*^3N[^VBQL@KY.[O]\(F\`!"`O``@L;(*^3N[_+B!O``0LQ
XM;(*^3N[^C")O``0L;(*^3N[^AB!O``0L;(*^3N[^@````^P````!`````0``U
XM">X````````#\@```^H````C`!\`'``?`!X`'P`>`!\`'P`>`!\`'@`?````I
XM'P`[`%H`>`"7`+4`U`#S`1$!,`%.`6T````$````#````!4````;````(0``@
XM`"4````J````+P```#8```!`````2````%$@(%,@($T@5'4@(%<@5&@@($8@O
XM(%,*````````````%`````````````````/L````#``````````R````-@``T
XM`#H````^````0@```$8```!*````3@```%(```!6````6@```%X````````#[
X-\@```^L````!```#\D8`<
X``
Xend
Xsize 4468
SHAR_EOF
echo "End of archive 1 (of 1)"
# if you want to concatenate archives, remove anything after this line
exit